웹개발 및 최신 테크 소식을 전하는 블로그, 웹이즈프리

HOME > linux

[Linux] make 명령어 알아보기

Last Modified : 2022-10-26 / Created : 2022-10-24
13,563
View Count
리눅스 환경에서 make 명령어는 매우 자주 사용되며 쉽게 볼 수 있는데요 ~ 아래는 make가 무엇이고 어떤 기능과 역할을 수행하는지 간략하게 알아보려고 합니다.



# 리눅스 make 알아보기


make 명령어는 규모가 작은 프로젝트보다는 크고 복잡한 프로젝트에서 특히 더 쉽게 볼 수 있는데요 ~ make는 여러 가지 해야할 일들을 미리 선언하거나 그룹핑하여 이를 쉽고 편하게 실행할 수 있는 툴입니다. 그래서 특히 빌드 및 배포 환경에서 CI/CD 목적의 컴파일 및 변환, 트랜스파일링 등등에 사용되는 것을 볼 수 있죠 ~

그럼 아래에서는 make를 사용하는 방법 및 문법에 대하여 더 자세히 알아봅니다.


! make 간략한 사용방법 알아보기


make를 사용하기 위해서는 제일 먼저 Makefile을 먼저 알아야합니다. Makefile을 make가 수행할 목록들을 정의한 리스트라고 생각하면되며 프로젝트의 root에 있습니다.

* Makefile
  • Project 경로의 root에 존재하는 파일
  • make로 수행할 명령어들을 저장한 파일
  • 마치 함수처럼 블록 단위로 선언하거나 사용이 가능

이처럼 make를 실행하기 위해서 가장 필수적인 요건입니다. 만약 페이지 루트에 파일이 존재하지 않는다면? 이 경우 빈 파일을 하나 생성해 바로 시작할 수 있습니다. 아래의 Makefile은 'Webisfree.com'를 보여주는 명령어를 추가한 후 make를 사용하여 실행해 보았습니다. 먼저 Makefile을 생성합니다.
> vim Makefile

# Webisfree 출력하기
showSitename:
    echo 'Webisfree.com'

위에서처럼 #은 Makefile 내부에서 주석으로 사용할 수 있습니다. 그리고 showSitename 처럼 블록을 지정한 이 후 그 뒤에 콜론을 사용하여 구분하도록 합니다. 이제 그 아래에는 실행할 명령어들이 놓이게 되는데 이 때 Tab 키를 사용하여 구분해야만 합니다. 위에서는 한 줄만 사용하였지만 여러 명령어를 줄바꿈하여 사용 가능합니다.

이제 make를 사용하여 실행해봅니다. (참고로 make는 맨 위의 코드 블록 하나만 수행합니다!)
> make

echo 'Webisfree.com'
Webisfree.com

make를 실행할 경우 선언된 명령어를 호출하게 됩니다. 위에서는 파일 내부에 showSitename:을 하나 사용하였고 그 아래에 "Websifree.com"출력하는 코드를 작성했습니다. 그리고 make로 실행된 결과를 보면 맨 첫 줄은 실행한 명령어와 다음 줄은 그 결과를 보여주었습니다.

가장 간단한 호출 방법이었습니다. 이제 두 개의 블록을 사용한 경우를 봅니다. 블록의 개수가 여러 개 여도 사용이 가능합니다.
showSitename:
  echo 'Webisfree.com'

showProtocol:
  echo "https"

만약 위에서 echo "https"만 수행하고 싶다면? 이 경우 아래처럼 make <블럭명>을 사용합니다.
> make showProtocol

echo "https"
https

이처럼 원하는 것만 선택해 실행하는 것이 가능합니다. 참고로 명령어를 출력하는 부분은 보여줄 필요가 없을 수 있습니다. 즉 위 실행 결과에서 echo "https"는 불필요한 경우 출력하지 않으려고 합니다. 이 경우에는 @기호를 사용할 수 있습니다. 아래처럼 수정하도록 합니다.
showProtocol:
  @echo "https"

이제 코드를 실행하면 어떻게 될까요? echo "https"를 제외하고 https만 출력될 것 입니다.
echo "https"

추가로 만약 두 개의 블럭들을 모두 실행하려고 합니다. make에 space를 사용하여 각각의 블럭명을 사용할 수 있습니다. 아래 코드를 봐주세요.
> make showSitename showProtocol

echo 'Webisfree.com'
Webisfree.com
https

참고로 순서를 바꾸면 바뀐 순서대로 실행되게 됩니다. 이처럼 모든 블록명을 선언할 수 있지만 번거롭기 때문에 더 간단한 방법이 필요해보입니다. 이 경우 코드 내부에서 다른 블록명을 수행하도록 코드를 작성할 수 있습니다.


@ Makefile 변수 전달하기, argument
추가로 make를 실행할 때 원하는 변수의 값을 전달할 수 있습니다. 만약 상황에 따라 바뀌는 환경변수 등을 전달할 필요가 있는 경우 매우 유용하게 사용할 수 있습니다. 예를들어 현재의 배포환경을 전달할 경우 아래와 같이 사용할 수 있죠.
> make env=dev

@echo 현재 실행 환경은 ${env}입니다.

실행하면 아래와 같이 출력되게 됩니다.
현재 실행 환경은 dev입니다.


@ Makefile 내부에서 다른 블록 실행하기
방법은 간단합니다. 블록의 콜론 뒤에 실행할 블록명들을 나열하면 됩니다. 이 때도 space를 사용하여 여러 개를 사용 가능하죠! 아래에서는 all: 이라는 새로운 블록명을 선언하고 전체 코드를 수행하도록 작성했습니다.
all: showSitename showProtocol

showSitename:
  echo 'Webisfree.com'

showProtocol:
  @echo "https"

이제 make 또는 make all을 실행하면? 미리 선언해둔 모든 블록들을 실행하게 됩니다.

참고로 위에서 #을 사용해 변수를 사용했었습니다. 추가로 = 기호를 사용하여 변수 선언이 가능합니다. 선언된 변수는 ${variable} 처럼 사용하는 것이 가능하죠! 간단한 예제입니다.


@ Makefile 변수 선언 후 사용하기
간단하게 sitename 변수를 선언하여 호출해 사용해보겠습니다.
sitename='Webisfree.com'

showSitename:
  echo ${sitename}

실행해보면 미리 선언한 변수를 echo를 사용해 출력합니다. 즉 잘 동작합니다! 참고로 변수를 뒤에 선언하여도 호이스팅되어 에러 없이 출려되니 참고해주세요.


여기까지 리눅스에서 make를 사용한 간략한 방법들을 함께 알아보았습니다.

아래의 글도 찾고 계시지 않나요?

    Previous

    .bash_profile 스크립트 실행 후 .bashrc가 구동되지 않는 이슈 해결하기

    Previous

    ubuntu 22에서 블루투스 연결된 소리가 안나오는 이슈